package JVM.第03篇_运行时内存篇;

/**
 * 动态链接(或指向运行时常量池的方法引用)
 * ●每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。
 * 包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking) 。
 * 比如 invokedynamic 指令
 *
 * ●在Java源文件被编译到字节码文件中时，所有的变量和方法引用都作为符号引用(Symbolic Reference)
 * 保存在class文件的常量池里。
 * 比如:描述一个方法调用了另外的其他方法时，
 * 就是通过常量池中指向方法的符号引用来表示的，
 * 那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
 *
 * 方法的调用
 * 在JVM中，将符号引用转换为调用方法的直接引用与方法的绑定机制相关。
 * ●静态链接:
 * 当一个字节码文件被装载进JVM内部时，如果被调用的8标方法在编译期可知，且运行期保持不变时。
 * 这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。
 * ●动态链接:
 * 如果被调用的方法在编详期无法被确定下来，也就是说，只能够在程序运行期将调用方法的符号引用 转换 为直接引用
 * 由于这种引用转换过程具备动态性，因此也就被称之为动态链接。
 *
 *
 * 对应的方法的绑定机制为:
 *    早期绑定(Early Binding) 和晚期绑定(Late Binding) 。
 *    绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程，这仅仅发生一次。
 * ●早期绑定:
 * 早期绑定就是指被调用的日标方法如果在编译期可知，且运行期保持不变时，
 * 即可将这个方法与所属的类型进行绑定，这样一来，由于明确了被调用的目标方法究竞是哪一个，
 * 因此也就可以使用静态链接的方式将符号引用转换为直接引用。
 * ●晚期绑定:
 * 如果被调用的方法在编译期无法被确定下来，只能够在程序运行期根据实际的类型绑定相关的方法，
 * 这种绑定方式也就被称之为晚期绑定。
 *
 */
public class C3_动态链接 {

}
